package com.gtq.uhome.service.serviceImpl;

import com.gtq.uhome.mapper.DistributionPortMapper;
import com.gtq.uhome.service.DistributionPortSerVice;
import com.gtq.uhome.vo.OrderVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class DistributionPortSerViceImpl implements DistributionPortSerVice {
    @Resource
    DistributionPortMapper distributionPortMapper;
    /**
     * 查询未派送的物流订单
     * @return 返回一个临时的订单vo
     */
    @Override
    public Map<String, Object> selectUndelivered(Integer courierId) {
        //调用mapper层的查询未派送的物流单
        List<OrderVo> orderVos = distributionPortMapper.selectUndelivered();
        //调用查询站点名称
        List<String> strings = distributionPortMapper.selectSiteName();
        //调用查询派送员状态
        String courierStatus = distributionPortMapper.selectCourierStatus(courierId);
        //判断是否有值
        if (orderVos.size()>0){
            //遍历结果
            for (int i = 0; i < orderVos.size(); i++) {
                orderVos.get(i).setDistance((int)(Math.random()*10));
            }
            //返回结果
            Map<String,Object> map=new HashMap<>();
            map.put("Undelivered",orderVos);
            map.put("siteName",strings);
            map.put("courierStatus",courierStatus);
            return map;
        }
        return null;
    }
    /**
     * 通过站点查询未派送的订单
     *
     * @return 返回查询结果
     */
    @Override
    public List<OrderVo> selectUndeliveredBySite(String siteName) {
        List<OrderVo> orderVos = distributionPortMapper.selectUndeliveredBySite(siteName);
        //判断是否有值
        if (orderVos.size()>0){
            //遍历结果
            for (int i = 0; i < orderVos.size(); i++) {
                orderVos.get(i).setDistance((int)(Math.random()*10));
            }
            //返回结果
            return orderVos;
        }
        //没有结果 返回空
        return null;
    }

    /**
     * 派送员抢单方法
     * @param courierId 配送员ID
     * @param orderId 订单号
     * @return true抢单成功 false抢单失败
     */
    @Override
    public synchronized Boolean setReceivingOrders(Integer courierId,String orderId) {
        //先查询订单是否存在
        Integer courier = distributionPortMapper.selectCourierIdByOrderId(orderId);
        if (courier==null){
            //调用派送员抢单方法
            Integer integer = distributionPortMapper.setReceivingOrders(courierId, orderId,new Date());
            //判断 并返回结果
            if (integer>0)
                return true;
        }
        return false;
    }

    /**
     *派送员接单/停止接单方法
     * @param courierId 配送员ID
     * @param courierState 配送员状态
     * @return true接单成功/停止接单 false 未知错误
     */
    @Override
    public Boolean receivingOrders(Integer courierId, String courierState) {
        //先去查询派送员状态表   看员工是否存在
        Integer integer = distributionPortMapper.selectCourierId(courierId);
        //如果存在 改变派送员状态
        if (integer>0) {
            Integer integer1 = distributionPortMapper.updateCourierState(courierId, courierState);
            if (integer1>0)
                return true;
        }else {
            //如果不存在 就添加
            Integer integer1 = distributionPortMapper.insertCourierState(courierId, courierState);
            if (integer1>0)
                return true;
        }
        return false;
    }
}
